home *** CD-ROM | disk | FTP | other *** search
/ TeX 1995 July / TeX CD-ROM July 1995 (Disc 1)(Walnut Creek)(1995).ISO / web / noweb / src / icon / yaccdefs.icn < prev    next >
Text File  |  1995-02-24  |  1KB  |  58 lines

  1. #line 2 "yaccdefs.nw"
  2. procedure main(args)
  3.   go()
  4. end
  5.  
  6. procedure postpass(name, arg)
  7.   static kind
  8.   case name of {
  9.     "begin" : arg ? kind := tab(upto(' ')|0)
  10.     "text" : if kind == "code" then arg ?
  11.         if id := tab(many(&letters)) then {
  12.           tab(many(' \t'))
  13.           if =":" & any(&letters ++ ' ([{') then writedefn(id)
  14.         }
  15.   }
  16.   return
  17. end
  18.  
  19. procedure prepass(name, arg)
  20.   if name == "end" then writedefn(&null) # force newline
  21. end
  22. #line 1 "defns.nw"
  23. procedure go()
  24.   local line
  25.   while line := read() do {
  26.     apply(prepass, line)
  27.     write(line)
  28.     apply(postpass, line)
  29.   }
  30. end
  31.  
  32. procedure apply(pass, line)
  33.     line ? (="@" & pass(tab(upto(' ')|0),  if =" " then tab(0) else &null))
  34. end
  35. #line 17 "defns.nw"
  36. procedure writedefn(defn, locl)
  37.   static indextext
  38.   initial indextext := ""
  39.   if /defn then
  40.     *indextext > 0 & 
  41. #line 30 "defns.nw"
  42. { # write("@index nl")          # don't!
  43.   indextext := ""
  44. }
  45. #line 22 "defns.nw"
  46.   else {
  47.     if *indextext + *defn > 65 then 
  48. #line 30 "defns.nw"
  49. { # write("@index nl")          # don't!
  50.   indextext := ""
  51. }
  52. #line 24 "defns.nw"
  53.     write(if \locl then "@index localdefn" else "@index defn ", defn)
  54.     indextext ||:= " " || defn
  55.   }
  56.   return
  57. end
  58.